package com.qdlc.p2p.biz.service;

import java.util.List;

import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.Experience;
import com.qdlc.p2p.dal.dto.User;
import com.qdlc.p2p.dal.model.ExperienceModel;

/**
 * 体验券Service
 *
 * @author xxx
 * @version 2.0
 * @date 2015年4月23日 上午11:06:07
 */
public interface ExperienceService {

    /**
     * 获取用户（所有的)体验券
     *
     * @param userId
     */
    PageDataList<ExperienceModel> findExperience(long userId);

    /**
     * 根据model进行查询
     *
     * @param model
     * @return
     */
    PageDataList<ExperienceModel> findByModel(ExperienceModel model);

    /**
     * 保存
     *
     * @param experience
     * @return
     */
    Experience save(Experience experience) throws Exception;

    /**
     * 根据主键ID查询
     *
     * @param id
     * @return
     */
    Experience findById(long id);

    /**
     * 获取用户（可用的)体验券数量
     *
     * @param userId
     */
    int countUsableExperience(long userId);

    /**
     * 获取用户（可用的)体验券
     *
     * @param userId
     */
    List<Experience> findUsableExperience(long userId);

    /**
     * 修改
     *
     * @param experience
     * @return
     */
    void update(Experience experience);

    /**
     * 禁用/启用
     *
     * @param id
     */
    int updateStatus(long id, byte status, byte preStatus);

    /**
     * 获取体验金总额
     *
     * @param ids
     * @param user_id
     * @return
     */
    double sumAmount(long[] ids, long user_id);

    /**
     * 获取待收体验券本金和利息
     *
     * @param borrowId
     * @param period
     * @return
     */
    Object[] getCapitalAndInterestByBorrowAndPeriod(long borrowId, int period);

    /**
     * 检测用户体验券的使用状态
     *
     * @param experienceIds
     * @param user
     * @return
     */
    boolean checkExperience(long[] experienceIds, User user);

    /**
     * 查询体验券本金年支出
     *
     * @param status
     * @param year
     * @return
     */
    double[] getExperienceByYear(int status, String year);

    /**
     * 用户的体验券列表
     *
     * @param model
     * @return
     */
    PageDataList<ExperienceModel> findUserList(ExperienceModel model);

    /**
     * 体验券过期处理
     */
    void experienceExpiredDispose();
}
